Many computer systems have a specialized graphics subsystem for producing vivid graphical images. At the core of these subsystems typically is a graphics processor that processes graphical data in a highly streamlined manner. In simplified terms, the graphics processor converts substantially unprocessed graphical data into a format that can be displayed on a conventional display device (e.g., a cathode ray tube display or a liquid crystal display).
As part of the image display process, applications executing on the host processor typically produce basic graphical data for processing by the graphics processor. Those applications may use standard function calls (e.g., as used in standardized graphics routing libraries, such as OPENGL or DIRECT3D) to forward such graphical data to the graphics processor via a high-speed bus (i.e., the “interface bus”). When using the noted function libraries, the data generally is in the form of graphics primitives, such as triangles, lines, or points and thus, includes vertex coordinates and vertex attributes, such as normal vectors, texture coordinates, and colors.
As graphics processing power has dramatically increased, the amount of data being visualized has correspondingly increased. Consequently, the load on the interface bus also has significantly increased. In many instances, however, graphics processors are capable of processing data faster than the data can be forwarded across the interface bus. Accordingly, in those situations, the speed of the interface bus limits host application performance.
Moreover, some data forwarded across the interface bus is not even necessary for producing the graphical image to be displayed. Specifically, graphics subsystems often receive large amounts of primitive attribute data that will not to be visible when ultimately displayed. For example, some primitives may be outside of the viewing area on the display device. Although such primitives should be rejected during geometry processing, the graphics processor still receives their attribute data. Accordingly, the graphics processor still incurs the full bandwidth cost of receiving the data across the interface bus.
U.S. Pat. No. 5,986,669 (“Kirkland”) shows an exemplary system having these inefficiencies. Specifically, Kirkland shows a graphics processor (referred to as a “rendering engine”) that first receives vertex attribute data relating to an image, and then determines if such data should be further processed. In other words, the graphics processor receives vertex attribute data even if it ultimately does not process that data. Accordingly, although it appears to save geometry processing by not processing all the attribute data, Kirkland does not reduce the load on the interface bus or at the graphics processor input.